// PROGRAMA : IDCPC004 OPCAO: 'CPD'
// BIBLIOTECA : SISP
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : GEJUSP - GER. DE JUSTICA, SEGURANCA E CIDADANIA
// INSTITUTO DE IDENTIFICACAO
// PROGRAMADOR : EDU/FM DATA: 30/06/92
// OBJETIVO : CONSULTA/EMISSAO POR POSTO.
// ATUALIZACOES DATA
// PROGRAMA : IDCPC004 27/11/1997
// BIBLIOTECA : SISP
// PROGRAMADOR :
// OBJETIVO : - ADAPTACAO PARA O SHOPPING DO CIDADAO
// REESTRUTURACAO DO LAY-OUT E INCLUSAO DE DATA DE
// EM 12/01/1998
// DIVISAO DOS MODULOS EM 12/05/1998
// ALTERCAO DE TELA EM 28/09/1999
// ALTERCAO DO CAMPO SAIDA DO RG EM 11/06/2002
// OBS : ESTE PROGRAMA FOI REESTRUTURADO POR SOLON MIRANDA
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.download.InputStreamDownload;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Idcpc004Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idcpc004A;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idctc001;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idctc004;
import br.com.vti.sisp_sicrim.antigo.model.DidCadastro;
import br.com.vti.sisp_sicrim.antigo.model.Idclc001;
import br.com.vti.sisp_sicrim.antigo.model.SicControle;
import br.com.vti.sisp_sicrim.antigo.model.Sisll001;
import br.com.vti.sisp_sicrim.antigo.model.Tablele;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Idcpc004 OBJETIVO : CONSULTA/EMISSAO POR POSTO. *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/idcpc004")
public class Idcpc004 {
	// Views utilizadas
	DidCadastro vwDidcad = new DidCadastro();
	SicControle vwDvecon = new SicControle();
	// Telas/relatorios utilizados
	Idcpc004A idcpc004A;
	Idctc001 idctc001;
	Idctc004 idctc004;
	Idcpc004Report report;
	// Includes utilizados
	Idclc001 idclc001 = new Idclc001();
	Sisll001 sisll001 = new Sisll001();
	Tablele tablele = new Tablele();
	// Areas globais / session
	Sisgsisp sisgsisp;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Idcpc004 idcpc004Anterior;
	String faseproc = "0";
	int nroReg = 1;

	private int i = 0;
	private int iAte = 0;
	private int y = 0;
	private int ct = 0;
	// 1 PRO0 (N9/1:14)
	private int posto = 0;
	private int cont = 0;
	private int seq = 0;
	private InputStreamDownload relatorio;

	private Idcpc004A preMapas() {
		int ind;
		idcpc004A = new Idcpc004A(true, sessao);

		// idcpc004A.setNumpo1(2);//TESTE

		// idcpc004A.setDdt(01);// TESTE
		// idcpc004A.setMdt(01);// TESTE
		// idcpc004A.setAdt(2013);// TESTE

		// idcpc004A.setDfi(01);// TESTE
		// idcpc004A.setMfi(8);// TESTE
		// idcpc004A.setAfi(2014);// TESTE

		idctc001 = new Idctc001(true, sessao);
		idctc004 = new Idctc004(true, sessao);
		for (ind = 1; ind <= 2; ind++) {
			idcpc004A.setConimp(ind, "");
		}
		// idcpc004A.getConimp()[1] = "S";// TESTE

		for (ind = 1; ind <= 14; ind++) {
			idctc004.setPos0(ind, 0);
			idctc004.setAtu1(ind, 0);
			idctc004.setMat0(ind, 0);
			idctc004.setVia0(ind, 0);
			idctc004.setReg0(ind, 0);
			idctc004.setPro0(ind, 0);
			idctc004.setEnd1(ind, "");
			idctc004.setNom0(ind, "");
		}
		idcpc004A.setDataCorrente(UtilBean.obtemDataCorrente());
		idcpc004A.setDataCorrente(UtilBean.inverteDataCorrente());

		idcpc004A.setNavegar("../idcpc004/executar");
		idctc004.setNavegar("../idcpc004/executar");
		idctc001.setNavegar("../idcpc004/executar");

		// Par�grafo: inicio()
		return idcpc004A;
	}

	public Idcpc004(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public InputStreamDownload executar(Idcpc004A idcpc004A, Idctc001 idctc001, Idctc004 idctc004) {
		try {
			main(idcpc004A, idctc001, idctc004);

		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, this.getClass().getSimpleName());
		}
		return relatorio;
	}

	private void main(Idcpc004A pidcpc004A, Idctc001 pidctc001, Idctc004 pidctc004) throws Exception {
		if (pidcpc004A == null && pidctc001 == null && pidctc004 == null) {
			primeiraVez = true;
			// idctc004 = new Idctc004 (primeiraVez);
			idcpc004A = preMapas();
			idcpc004A.setNavegar("../idcpc004/executar");
			result.include("idcpc004A", idcpc004A);
			sessao.setAtributo("IDCPC004", this);
			idcpc004A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			restaurarEstados(pidcpc004A, pidctc001, pidctc004);
		}

		idctc001.setConf("S");
		// DEFINE PRINTER(EFM = 1)
		if (idcpc004A != null) {
			seq = 0;

			idcpc004A.receberTela(false, result);
			if (!UtilBean.funcao.equals(UtilBean.ctt_processa)) {
				idcpc004A.enviarMensagem(null, "");
				retornar();
				return;
			}
			if (!idctc001.getOperacao().equals("CPD")) {
				funcoes.sissm001(result, sessao);
			}
			// CHAMA PROGRAMA DE ACORDO COM OPERACAO
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 0, 3, "N", 207);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 3, 12, "N", idcpc004A.getNumpo1());
			tablele.resp = funcoes.sisst001(207, idcpc004A.getNumpo1(), tablele.resp);
			// PESQUISA TABELA
			if (UtilBean.subStr(tablele.resp, 0, 1).equals("#")) {
				idcpc004A.enviarMensagem("operacao", "");
				retornar();
				return;
			}
			if (!UtilBean.validarMascara(idcpc004A.getDatini(), "yyyyMMdd")) {
				idcpc004A.enviarMensagem("numpo1", "");
				retornar();
				return;
			}
			if (idcpc004A.getAdt() < 1985) {
				idcpc004A.enviarMensagem("adt", "");
				retornar();
				return;
			}
			if (!UtilBean.validarMascara(idcpc004A.getDatfim(), "yyyyMMdd")) {
				idcpc004A.enviarMensagem("adt", "");
				retornar();
				return;
			}
			if (idcpc004A.getAfi() < 1985) {
				idcpc004A.enviarMensagem("afi", "");
				retornar();
				return;
			}
			if (idcpc004A.getDatini() > idcpc004A.getDatfim()) {
				idcpc004A.enviarMensagem("adt", "");
				retornar();
				return;
			}
			idctc004.setDtini(idcpc004A.getDatini());
			idctc004.setDtini((int) funcoes.sissd002(idctc004.getDtini()));
			// INVERTE DATAS
			idctc004.setDtfim(idcpc004A.getDatfim());
			idctc004.setDtfim((int) funcoes.sissd002(idctc004.getDtfim()));
			if (UtilBean.validaSelecao(idcpc004A.getConimp())) {
				idcpc004A.enviarMensagem("afi", "");
				return;
			}
		}
		if (!idcpc004A.getConimp(2).trim().equals("")) {
			relatorio();
			if (relatorio == null) {
				retornar();
			}

			return;
		} else {
			if (idcpc004A.getNumpo1() > 0) {
				posto = idcpc004A.getNumpo1();
			} else {
				posto = 999;
			}
			while (vwDidcad.leituraDataAtualizacaoFaixa(idcpc004A.getDatini(), idcpc004A.getDatfim()) && i < iAte) {
				i++;
			}
			i = 0;
			while (vwDidcad.leituraDataAtualizacaoFaixa(idcpc004A.getDatini(), idcpc004A.getDatfim()) && i < 14) {
				cont += 1;
				if (cont > 50) {

					// idcpc004J.enviarReceberTela(false, result);
					cont = 0;
				}
				if (idcpc004A.getNumpo1() > 0) {
					if (!(vwDidcad.getNumeroPosto() == idcpc004A.getNumpo1())) {
						continue;
					}
				}
				// if (vwDidcad.fimDados()) {
				// if (i > 0) {
				// saida();
				// }
				// }
				if (idcpc004A.getNumpo1() > 0) {
					if (!(vwDidcad.getNumeroPosto() == idcpc004A.getNumpo1())) {
						continue;
					}
				}
				y += 1;
				idctc004.setMensagemSaida(UtilBean.concatena("CONSULTA EFETUADA OK ", seq + 1, " REGISTROS"));
				i += 1;
				idctc004.setAtu1(i, vwDidcad.getDataAtualizacao());
				idctc004.setAtu1(i, (int) funcoes.sissd002(idctc004.getAtu1(i)));
				// INVERTE DATAS

				idctc004.setReg0(i, vwDidcad.getNumeroRg());
				idctc004.setEnd1(i, vwDidcad.getEnderecoIdent());
				idctc004.setPos0(i, vwDidcad.getNumeroPosto());
				idctc004.setVia0(i, vwDidcad.getNumeroVia());
				idctc004.setPro0(i, vwDidcad.getNumeroSerieCart());
				// MOVE DINIDE-NUMPRO TO PRO0(I)

				idctc004.setMat0(i, vwDidcad.getMatriculaFunc());
				idctc004.setNom0(i, vwDidcad.getNomeIdent());
				seq += 1;
			}
			if (i > 0) {
				switch (saida(pidctc004)) {
				case 0: // Enviar tela
				{
					result.include("idctc004", idctc004);
					sessao.setAtributo("IDCPC004", this);
					if (!result.used())
						idctc004.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				}
				case 1: // Processou Ok
				{
					iAte = iAte + 14;
					result.include("idctc004", idctc004);
					sessao.setAtributo("IDCPC004", this);
					idctc004.receberTela(false, result);
					return;
				}
				case 2: // Erro consistencia
				{
					result.include("idctc004", idctc004);
					sessao.setAtributo("IDCPC004", this);
					idctc004.receberTela(false, result);
					return;
				}
				case 9: // Deprezar registro
				{

				}
				}
			}
			// if (idctc004.getConf().equals("N")) {
			// break;
			// }

			if (vwDidcad.registrosProcessados() == 0) {
				idcpc004A.enviarMensagem(null, "");
				retornar();
				return;
			}
		}
		sessao.setAtributo("IDCPC004", this);
		result.include("idctc004", idctc004);
		if (!result.used())
			idctc004.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
	}

	private int saida(Idctc004 pidctc004) throws Exception {
		String msgret = "";
		Idccc001 idccc001 = new Idccc001(result, sessao);

		if (pidctc004 == null) {
			return 0;
		}
		if (pidctc004 != null) {
			idctc004.receberTela(false, result);
			if (idctc004.getConf().equals("N")) {
				return 9;
			}
			if (idctc004.getOpc() == 0) {
				return 9;
			}
			if (idctc004.getOpc() > i) {
				idctc004.enviarMensagem("opc", "NUMERO SELECIONADO INVALIDO");
				return 2;
			}
		}
		// TELA CONSULTA ATUALIZACOES P/POSTO
		while (vwDidcad.leituraNomeIdentMaiorig(idctc004.getNom0(idctc004.getOpc())) && vwDidcad.registrosProcessados() < nroReg)
			;
		if (vwDidcad.registrosProcessados() == nroReg) {
			idctc001 = idccc001.executar(vwDidcad);
			// COPYCODE CONSULTA
			if (!idctc001.getOperacao().equals("CPD")) {
				funcoes.sissm001(result, sessao);
			}

			// CHAMA PROGRAMA DE ACORDO COM OPERACAO
			idctc001.setConf("S");

			idctc001.setNavegar("../idcpc004/executar");
			result.include("idctc001", idctc001);
			sessao.setAtributo("IDCPC004", this);
			idctc001.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
			return 0;
		}
		// TELA CONSULTA ATUALIZACOES P/POSTO
		i = 0;
		for (int i1 = 1; i1 <= 14; i1++) {
			idctc004.setReg0(i1, 0);
			idctc004.setPos0(i1, 0);
			idctc004.setNom0(i1, "");
			idctc004.setAtu1(i1, 0);
			idctc004.setVia0(i1, 0);
			idctc004.setMat0(i1, 0);
			idctc004.setPro0(i1, 0);
			idctc004.setEnd1(i1, "");
		}
		return 1;
	}

	// END-IF
	private void relatorio() throws Exception {
		// RELATORIO 1 PS=60 LS=134 SG=ON
		report = new Idcpc004Report();
		report.setPageSize(60);
		report.setLineSize(134);
		// RELATORIO
		while (vwDidcad.leituraDataAtualizacaoFaixa(idcpc004A.getDatini(), idcpc004A.getDatfim())) {
			cont += 1;
			if (cont > 50) {

				// idcpc004J.enviarReceberTela(false, result);
				cont = 0;
			}
			if (idcpc004A.getNumpo1() > 0) {
				if (!(vwDidcad.getNumeroPosto() == idcpc004A.getNumpo1())) {
					continue;
				}
			}
			// I N�O � TRATADO NESTA ROTINA
			// if (vwDidcad.fimDados()) {
			// if (i > 0) {
			// saida();
			// }
			// }
			idctc001.setDatnas(vwDidcad.getDataNasc());
			idctc001.setDatnas((int) funcoes.sissd002(idctc001.getDatnas()));
			// INVERTE DATAS
			ct += 1;
			report.setCt(ct);
			report.setDatatu(vwDidcad.getDataAtualizacao());
			report.setDatatu((int) funcoes.sissd002(report.getDatatu()));
			report.setDatexp(vwDidcad.getDataExp());
			report.setDatexp((int) funcoes.sissd002(report.getDatexp()));
			report.setNommae(vwDidcad.getNomeMae());
			report.setNomide(vwDidcad.getNomeIdent());

			report.setDinideMatfun(vwDidcad.getMatriculaFunc());
			report.setDinideNumpos(vwDidcad.getNumeroPosto());
			report.setDinideRegger(vwDidcad.getNumeroRg());
			report.setDinideRenaid(vwDidcad.getRenaid());
			report.setCt(ct);

			report.gravaRelatorio(2);

			// RELATORIO
		}
		report.gravaRelatorio(3);
		// 58T DINIDE-NUMPRO(EM=99999999)
		// 58T DINIDE-NSERIE(EM=99999999)
		if (vwDidcad.registrosProcessados() == 0) {
			idcpc004A.setMensagemSaida("REGISTRO INEXISTENTE");
		} else {
			idcpc004A.setMensagemSaida("EMISSAO EFETUADA OK");
			relatorio = report.imprimir();
		}

		// RELATORIO
	}

	private void restaurarEstados(Idcpc004A pidcpc004A, Idctc001 pidctc001, Idctc004 pidctc004) {
		this.idcpc004Anterior = (Idcpc004) sessao.getAtributo("IDCPC004");
		if (pidcpc004A != null) {
			idcpc004A = pidcpc004A;
		} else {
			idcpc004A = this.idcpc004Anterior.idcpc004A;
		}
		idcpc004A.setSessao(sessao);
		if (pidctc001 != null) {
			idctc001 = pidctc001;
		} else {
			idctc001 = this.idcpc004Anterior.idctc001;
		}
		idctc001.setSessao(sessao);
		if (pidctc004 != null) {
			idctc004 = pidctc004;
		} else {
			idctc004 = this.idcpc004Anterior.idctc004;
		}
		idctc004.setSessao(sessao);
		this.faseproc = this.idcpc004Anterior.faseproc;
		this.iAte = this.idcpc004Anterior.iAte;
	}

	public void retornar() {
		result.include("idcpc004A", idcpc004A);
		sessao.setAtributo("IDCPC004", this);
		idcpc004A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
	}

}
